package br.com.edoc.util;

import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TratamentoDocumentos {
public static boolean validarCNPJ( String cnpj ){
		
		cnpj = cnpj.replace(".", "");
		cnpj = cnpj.replace("-", "");
		cnpj = cnpj.replace("/", "");
		
		int soma = 0, dig;  
		String calcCNPJ = cnpj.substring(0,12);  

		if ( cnpj.length() != 14 )  
			return false;  

		char[] chr_cnpj = cnpj.toCharArray();  

		/* Primeira parte */  
		for( int i = 0; i < 4; i++ )  
			if ( chr_cnpj[i]-48 >=0 && chr_cnpj[i]-48 <=9 )  
				soma += (chr_cnpj[i] - 48 ) * (6 - (i + 1)) ;  
		for( int i = 0; i < 8; i++ )  
			if ( chr_cnpj[i+4]-48 >=0 && chr_cnpj[i+4]-48 <=9 )  
				soma += (chr_cnpj[i+4] - 48 ) * (10 - (i + 1)) ;  
		dig = 11 - (soma % 11);  

		calcCNPJ += ( dig == 10 || dig == 11 ) ?  
				"0" : Integer.toString(dig);  

		/* Segunda parte */  
		soma = 0;  
		for ( int i = 0; i < 5; i++ )  
			if ( chr_cnpj[i]-48 >=0 && chr_cnpj[i]-48 <=9 )  
				soma += (chr_cnpj[i] - 48 ) * (7 - (i + 1)) ;  
		for ( int i = 0; i < 8; i++ )  
			if ( chr_cnpj[i+5]-48 >=0 && chr_cnpj[i+5]-48 <=9 )  
				soma += (chr_cnpj[i+5] - 48 ) * (10 - (i + 1)) ;  
		dig = 11 - (soma % 11);  
		calcCNPJ += ( dig == 10 || dig == 11 ) ?  
				"0" : Integer.toString(dig);
		
		boolean retorno = cnpj.equals(calcCNPJ);
		
		if(cnpj.equals("00000000000000") || cnpj.equals("11111111111111") || cnpj.equals("22222222222222") || cnpj.equals("33333333333333") || cnpj.equals("44444444444444") || cnpj.equals("55555555555555") || cnpj.equals("66666666666666") || cnpj.equals("77777777777777") || cnpj.equals("88888888888888") || cnpj.equals("99999999999999")){
			retorno = false;
		}
		
		return retorno;
		
	}  

	public static boolean validarCpf (String strCpf){
		
	

		strCpf = strCpf.replace(".", "");
		strCpf = strCpf.replace("-", "");

		int     d1, d2;
		int     digito1, digito2, resto;
		int     digitoCPF;
		String  nDigResult;

		d1 = d2 = 0;
		digito1 = digito2 = resto = 0;

		for (int nCount = 1; nCount < strCpf.length() -1; nCount++)
		{
			digitoCPF = Integer.valueOf (strCpf.substring(nCount -1,
					nCount)).intValue();

			//multiplique a ultima casa por 2 a seguinte por 3 a
			//seguinte por 4 e assim por diante.
			d1 = d1 + ( 11 - nCount ) * digitoCPF;

			//para o segundo digito repita o procedimento incluindo
			//o primeiro digito calculado no passo anterior.
			d2 = d2 + ( 12 - nCount ) * digitoCPF;
		};

		//Primeiro resto da divisão por 11.
		resto = (d1 % 11);

		//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito é
		//11 menos o resultado anterior.
		if (resto < 2)
			digito1 = 0;
		else
			digito1 = 11 - resto;

		d2 += 2 * digito1;

		//Segundo resto da divisão por 11.
		resto = (d2 % 11);

		//Se o resultado for 0 ou 1 o digito é 0 caso contrário o digito
		// 11 menos o resultado anterior.
		if (resto < 2)
			digito2 = 0;
		else
			digito2 = 11 - resto;

		//Digito verificador do CPF que está sendo validado.
		String nDigVerific = strCpf.substring
		(strCpf.length()-2, strCpf.length());

		//Concatenando o primeiro resto com o segundo.
		nDigResult = String.valueOf(digito1) + String.valueOf(digito2);

		//comparar o digito verificador do cpf com o
		//primeiro resto + o segundo resto.
		
		boolean retorno = nDigVerific.equals(nDigResult);
		
//		if(cpf.equals("000.000.000-00") || cpf.equals("111.111.111-11") || cpf.equals("222.222.222-22") || cpf.equals("333.333.333-33") || cpf.equals("444.444.444-44") || cpf.equals("555.555.555-55") || cpf.equals("666.666.666-66") || cpf.equals("777.777.777-77") || cpf.equals("888.888.888-88") || cpf.equals("999.999.999-99")){
//			retorno = false;
//		}
		return retorno;
	}

	public static boolean validarEmail(String email){
		// Insira o E-mail para validação
		// String email = "xyz@.com";
		// Seta os caracteres de validação para a classe Pattern
		Pattern p = Pattern.compile(".+@.+\\.[a-z]+");

		// O Match irá verificar se o e-mail atende as suas condições pró definidas no Pattern
		Matcher m = p.matcher(email);

		// A variável boleana é a melhor para verificar o retorno do match
		boolean matchFound = m.matches();

		StringTokenizer st = new StringTokenizer(email, ".");
		String lastToken = null;
		while (st.hasMoreTokens()) {
			lastToken = st.nextToken();
		}

		if (matchFound && lastToken.length() >= 2
				&& email.length() - 1 != lastToken.length()) {

			//validação da silga do país
			return true;
		}
		else return false;
	}
}
